<?php
namespace app\user\model;
use think\Model;
use think\Db;
class Member extends Model
{
     protected $autoWriteTimestamp = true;
        // 定义时间戳字段名
      protected $createTime = 'reg_time';
      protected $updateTime = 'update_time';
      /* 用户模型自动完成 */
      //新增及更新
      // 	protected $auto = ['password','update_time'];
      // 新增
      protected $insert = ['password','status'=>1,'reg_ip','reg_time'];
      // 更新
      protected $update = ['password','update_time'];
        // password属性修改器

      protected function setRegIpAttr($value, $data)
    	{
    	        return get_client_ip(1);
    	}

      /**
	 * 注册一个新用户
	 * @param  string $username 用户名
	 * @param  string $password 用户密码
	 * @param  string $email    用户邮箱
	 * @param  string $mobile   用户手机号码
	 * @param  stting $scene  验证场景  admin 后台 user为用户注册
	 * @return integer          注册成功-用户信息，注册失败-错误编号
	 */
  	public function register($data,$scene='',$nickname=''){

        $data['password']=hb_member_md5($data['password'], HB_AUTH_KEY);

  		/* 添加用户 */
		$user_data=array();
		$user_data=$this->save($data);

  		if ($user_data) {

  			$uid= $this->id;
  			 return $uid ? $uid : 0; //0-未知错误，大于0-注册成功
  		}else{

  			return $this->getError();
  		}
  	}
    /**
	 * 用户登录认证
	 * @param  string  $username 用户名
	 * @param  string  $password 用户密码
	 * @param  integer $type     用户名类型 （1-用户名，2-邮箱，3-手机，4-UID）
	 * @return integer           登录成功-用户ID，登录失败-错误编号
	 */
	public function login($username, $password, $type = 1){

		/* 获取用户数据 */
		$user = $this->where('username',$username)->field('id,nickname,username,password')->find();

		if($user){


			if($this->hb_member_md5($password, HB_AUTH_KEY ) === $user['password']){
				$this->updateLogin($user['id']); //更新用户登录信息
				return $user['id']; //登录成功，返回用户ID
			} else {
				return -2; //密码错误
			}
		} else {

			return -1; //用户不存在或被禁用
		}
	}
  /**
	 * 更新用户登录信息
	 * @param  integer $uid 用户ID
	 */
	protected function updateLogin($uid){
		$data = array(
			'id'              => $uid,
			'last_login_time' => time(),
			'last_login_ip'   => $this->get_client_ip(1),
		);
		$this->where('id',$uid)->update($data);
	}

	function hb_member_md5($str, $key = 'HuiboMember20180310'){
		return '' === $str ? '' : md5(sha1($str) . $key);
	}
	function get_client_ip($type = 0, $adv = false) {
		$type      = $type ? 1 : 0;
		static $ip = NULL;
		if ($ip !== NULL) {
			return $ip[$type];
		}

		if ($adv) {
			if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
				$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
				$pos = array_search('unknown', $arr);
				if (false !== $pos) {
					unset($arr[$pos]);
				}

				$ip = trim($arr[0]);
			} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
				$ip = $_SERVER['HTTP_CLIENT_IP'];
			} elseif (isset($_SERVER['REMOTE_ADDR'])) {
				$ip = $_SERVER['REMOTE_ADDR'];
			}
		} elseif (isset($_SERVER['REMOTE_ADDR'])) {
			$ip = $_SERVER['REMOTE_ADDR'];
		}
		// IP地址合法验证
		$long = sprintf("%u", ip2long($ip));
		$ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
		return $ip[$type];
	}
}
